Skip to content

Latest commit

 

History

History
63 lines (53 loc) · 2.22 KB

File metadata and controls

63 lines (53 loc) · 2.22 KB

1297. Maximum Number of Occurrences of a Substring

Given a string s, return the maximum number of occurrences of any substring under the following rules:

  • The number of unique characters in the substring must be less than or equal to maxLetters.
  • The substring size must be between minSize and maxSize inclusive.

Example 1:

Input: s = "aababcaab", maxLetters = 2, minSize = 3, maxSize = 4 Output: 2 Explanation: Substring "aab" has 2 occurrences in the original string. It satisfies the conditions, 2 unique letters and size 3 (between minSize and maxSize). 

Example 2:

Input: s = "aaaa", maxLetters = 1, minSize = 3, maxSize = 3 Output: 2 Explanation: Substring "aaa" occur 2 times in the string. It can overlap. 

Constraints:

  • 1 <= s.length <= 105
  • 1 <= maxLetters <= 26
  • 1 <= minSize <= maxSize <= min(26, s.length)
  • s consists of only lowercase English letters.

Solutions (Rust)

1. Solution

use std::collections::HashMap;implSolution{pubfnmax_freq(s:String,max_letters:i32,min_size:i32,max_size:i32) -> i32{let s = s.as_bytes();let min_size = min_size asusize;letmut letter_count = [0;26];letmut unique_count = 0;letmut substring_count = HashMap::new();for i in0..min_size { letter_count[(s[i] - b'a')asusize] += 1; unique_count += (letter_count[(s[i] - b'a')asusize] == 1)asi32;}if unique_count <= max_letters { substring_count.insert(&s[..min_size],1);}for i in min_size..s.len(){ letter_count[(s[i - min_size] - b'a')asusize] -= 1; unique_count -= (letter_count[(s[i - min_size] - b'a')asusize] == 0)asi32; letter_count[(s[i] - b'a')asusize] += 1; unique_count += (letter_count[(s[i] - b'a')asusize] == 1)asi32;if unique_count <= max_letters {*substring_count.entry(&s[i - min_size + 1..=i]).or_insert(0) += 1;}}*substring_count.values().max().unwrap_or(&0)}}
close